#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> q[405]; 
int a[405],vis[405],t[405],v[105];
int n,maxn=0;
void dfs(int x) {
	if(x==n+1) {
		int ans=0;
		for(int i=1;i<=n;i++) v[i]=a[i];
		for(int i=1;i<=n;i++) {
			ans+=v[t[i]];
			for(int j=0;j<q[t[i]].size();j++) {
				int u=q[t[i]][j];
				v[u]+=v[t[i]];
			}
		}
		maxn=max(maxn,ans);
		return ;
	}
	for(int i=1;i<=n;i++) {
		if(!vis[i]) {
			t[x]=i;
			vis[i]=1;
			dfs(x+1);
			vis[i]=0;
		}
	}
}
signed main() {
	freopen("light.in","r",stdin);
	freopen("light.out","w",stdout); 
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	for(int i=1;i<n;i++) {
		int x,y;
		scanf("%lld %lld",&x,&y);
		q[x].push_back(y);
		q[y].push_back(x);
	}
	dfs(1);
	printf("%lld",maxn);
	return 0;
} 

/*
5
1 2 3 4 5
1 2
1 3
2 4
2 5
*/
